package it.pir.es01ProduttoreConsumatore;

public class ServerBuffer<T>{

	private Object codaProduttori,codaConsumatori;
	private T content;
	
	public ServerBuffer(){
		content=null;
		codaConsumatori = new Object();
		codaProduttori = new Object();
	}
	 
	public void put (T t){
		synchronized (codaProduttori) {
		if(content!=null)
			System.out.print("Server: il produttore è in attesa\n");

		while(content!=null){
			try{
				codaProduttori.wait();
			}
			catch(InterruptedException ex){}
		}
		content=t;
		}
		synchronized (codaConsumatori) {
			codaConsumatori.notifyAll();
		}
		
	}
	
	public T take(){
		T t=null;
		synchronized (codaConsumatori){
			if(content==null)
				System.out.print("Server: il consumatore è in attesa\n");
			while(content==null){
				try{
					codaConsumatori.wait();
				}
				catch(InterruptedException ex){}
			}
			t = content;
			content = null;
		}
		synchronized(codaProduttori){
			codaProduttori.notifyAll();
		}
		return t;
	}	
}
